﻿//
// ParallelGrep
//
// Copyright (C) 2011 - Tatsuya Niioka
//
using System;
using System.Collections.ObjectModel;
using GrepEngine;
using ParallelGrep.Model;
using ParallelGrep.Properties;

namespace ParallelGrep.ViewModel
{
    /// <summary>
    /// インデント変換ViewModel
    /// </summary>
    public class IndentConvertViewModel : ViewModel
    {
        private MainViewModel m_mainViewModel;

        #region Constructor
        /// <summary>
        /// 指定したMainViewModelで新しい<see cref="IndentConvertViewModel"/>クラスを生成します。
        /// </summary>
        /// <param name="mainViewModel">MainViewModel</param>
        public IndentConvertViewModel(MainViewModel mainViewModel)
        {
            m_mainViewModel = mainViewModel;


        }
        #endregion

        #region LoadResources
        /// <summary>
        /// リソース読み込み処理を実行します。
        /// </summary>
        public void LoadResources()
        {
            #region Tabs
            Tabs.Clear();
            Tabs.Add(new ItemInfo() { ID = "2", Name = "2" });
            Tabs.Add(new ItemInfo() { ID = "3", Name = "3" });
            Tabs.Add(new ItemInfo() { ID = "4", Name = "4" });
            Tabs.Add(new ItemInfo() { ID = "5", Name = "5" });
            Tabs.Add(new ItemInfo() { ID = "6", Name = "6" });
            Tabs.Add(new ItemInfo() { ID = "8", Name = "8" });

            OnPropertyChanged("TabSize");
            #endregion

            #region IndentConvertModes
            IndentConvertModes.Clear();
            IndentConvertModes.Add(new ItemInfo() { ID = "Tab", Name = Resources.IndentConvertTab });
            IndentConvertModes.Add(new ItemInfo() { ID = "Space", Name = Resources.IndentConvertSpace });

            OnPropertyChanged("IndentConvertMode");
            #endregion
        }
        #endregion

        #region AllPropertyChanged
        /// <summary>
        /// すべてのプロパティの変更通知します。
        /// </summary>
        internal void AllPropertyChanged()
        {
            this.OnPropertyChanged("IndentConvertMode");
            this.OnPropertyChanged("TabSize");
        }
        #endregion

        #region Tabs
        private ObservableCollection<ItemInfo> m_tabs;
        /// <summary>
        /// タブサイズ一覧を取得します。
        /// </summary>
        public ObservableCollection<ItemInfo> Tabs
        {
            get
            {
                if (m_tabs == null)
                {
                    m_tabs = new ObservableCollection<ItemInfo>();
                }
                return m_tabs;
            }
        }
        #endregion

        #region IndentConvertModes
        private ObservableCollection<ItemInfo> m_indentConvertModes;
        /// <summary>
        /// インデントコンバート一覧を取得します。
        /// </summary>
        public ObservableCollection<ItemInfo> IndentConvertModes
        {
            get
            {
                if (m_indentConvertModes == null)
                {
                    m_indentConvertModes = new ObservableCollection<ItemInfo>();
                }
                return m_indentConvertModes;
            }
        }
        #endregion

        #region IndentConvertMode
        /// <summary>
        /// インデント変換モードを取得または設定します。
        /// </summary>
        public string IndentConvertMode
        {
            get
            {
                return m_mainViewModel.Info.IndentConvertMode.ToString();
            }
            set
            {
                IndentConvertMode mode;
                try
                {
                    mode = (IndentConvertMode)Enum.Parse(typeof(IndentConvertMode), value);
                }
                catch
                {
                    return;
                }
                if (m_mainViewModel.Info.IndentConvertMode == mode)
                {
                    return;
                }
                m_mainViewModel.Info.IndentConvertMode = mode;
                this.OnPropertyChanged("IndentConvertMode");
                m_mainViewModel.IsModified = true;
            }
        }
        #endregion

        #region TabSize
        /// <summary>
        /// タブサイズを取得または設定します。
        /// </summary>
        public int TabSize
        {
            get
            {
                return m_mainViewModel.Info.TabSize;
            }
            set
            {
                if (m_mainViewModel.Info.TabSize == value)
                {
                    return;
                }
                m_mainViewModel.Info.TabSize = value;
                this.OnPropertyChanged("TabSize");
                m_mainViewModel.IsModified = true;
            }
        }
        #endregion

    }
}
